import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Random;
import java.util.Scanner;
import java.util.zip.DataFormatException;
public class Main 
{
        public volatile static int hod;
        public volatile static boolean over = false;
        static float P;
        public volatile static int applesCount = 0;
        static class Gamer extends Thread
        {
                public int x=0,y=0;
                public int myApple = 0;
                @Override
                public synchronized void run() 
                {
                        while(true)
                        {
                                try 
                                {
                                        if(!over)
                                        {
                                                System.out.println("Игрок "+this.getName()+" встал в очередь и ждёт...");
                                                wait();
                                        }
                                } 
                                catch (InterruptedException e)
                                {
                                        if(!over)
                                        {
                                                System.out.println("Игрок "+this.getName()+" делает ход... "+doHod());
                                        }
                                        else return;
                                }
                        }
                }
                public int doHod()
                {
                        Random rand = new Random();
                        hod = rand.nextInt(4);
                        return hod; //up,left,down,right
                }
        }
        @SuppressWarnings("resource")
        public static void main(String[] args) throws InterruptedException, FileNotFoundException, DataFormatException 
        {
        	try
        	{
                Scanner in = new Scanner(new FileReader("apple.in"));
                if(!in.hasNextInt()) throw new DataFormatException("Неверные данные");
                int N = in.nextInt();
                Integer field[][] = new Integer[N][N];
                if(!in.hasNextInt()) throw new DataFormatException("Неверные данные");
                int M = in.nextInt();
                if(!in.hasNext()) throw new DataFormatException("Неверные данные");
                P = Float.parseFloat(in.next());
                in.close();
                Gamer[] t = new Gamer[M];
                int id = 0;
                for(int i = 0; i<M;i++)
                {
                        t[i] = new Gamer();
                        t[i].setName(i+"");
                        Random r = new Random();
                        t[i].x = r.nextInt(N);
                        t[i].y = r.nextInt(N);
                        System.out.println("Игрок "+t[i].getName()+" встал на координаты "+t[i].x+" "+t[i].y);
                        t[i].start();
                }
                for(int j = 0;j<N;j++)
                {
                        for(int k=0;k<N;k++)
                        {
                                if(getApple())
                                {
                                        boolean isset = false;
                                        for(int i = 0; i<M;i++)
                                        {
                                                if(t[i].x == j && t[i].y ==k) isset = true;
                                        }
                                        if(!isset)
                                        {
                                                field[j][k] = -2;//apple
                                                System.out.println("В поле "+j+" "+k+" посадили яблоко");
                                                applesCount++;
                                        }
                                }
                        }
                }
                while(true)
                {
                        if(applesCount == 0) 
                        {
                                System.out.println("GAME OVER");
                                over = true;
                                Thread.sleep(1000);
                                for(int i=0;i<M;i++) 
                                {
                                        t[i].interrupt();
                                        System.out.println("Игрок "+(i+1)+" съел "+t[i].myApple+" яблок");
                                }
                                break;
                        }
                        //Thread.sleep(1000);
                        if(id==M) id = 0;
                        //System.out.println("id="+id);
                        t[id].interrupt();
                        switch(hod)
                        {
                                case 0:
                                {
                                        System.out.println("Игрок "+t[id].getName()+" хочет вверх");//gamer want to up
                                        if(t[id].y == 0)
                                        {
                                                System.out.println("Ход не удался"); // gamer cannot up :(
                                                //t[id].interrupt();
                                        }
                                        else
                                        {
                                                System.out.println("Походил вверх"+t[id].x+t[id].y);
                                                int y =t[id].y-1;
                                                if(field[t[id].x][y]!=null && field[t[id].x][y]==-2)
                                                {
                                                        System.out.println("Съел яблоко");
                                                        applesCount--;
                                                        t[id].myApple++;
                                                }
                                                field[t[id].x][t[id].y] = -1;
                                                field[t[id].x][y] = id;
                                                t[id].y--;
                                                //t[id].interrupt();
                                        }
                                        break;
                                }
                                case 1:
                                {
                                        System.out.println("Игрок "+t[id].getName()+" хочет влево");//gamer want to left
                                        if(t[id].x == 0)
                                        {
                                                System.out.println("Ход не удался");
                                                //t[id].interrupt();
                                        }
                                        else
                                        {
                                                System.out.println("Походил влево"+t[id].x+t[id].y);
                                                int x = t[id].x-1;
                                                if(field[x][t[id].y]!= null && field[x][t[id].y]==-2)
                                                {
                                                        System.out.println("Съел яблоко");
                                                        applesCount--;
                                                        t[id].myApple++;
                                                }
                                                field[t[id].x][t[id].y] = -1;
                                                field[x][t[id].y] = id;
                                                t[id].x--;
                                                //t[id].interrupt();
                                        }
                                        break;
                                }
                                case 2:
                                {
                                        System.out.println("Игрок "+t[id].getName()+" хочет вниз");//gamer want to down
                                        if(t[id].y == N-1)
                                        {
                                                System.out.println("Ход не удался"); // :(
                                                //t[id].interrupt();
                                        }
                                        else
                                        {
                                                System.out.println("Походил вниз"+t[id].x+t[id].y);
                                                int y = t[id].y+1;
                                                if(field[t[id].x][y]!= null && field[t[id].x][y]==-2)
                                                {
                                                        System.out.println("Съел яблоко");
                                                        applesCount--;
                                                        t[id].myApple++;
                                                }
                                                field[t[id].x][t[id].y] = -1;
                                                field[t[id].x][y] = id;
                                                t[id].y++;
                                                //t[id].interrupt();
                                        }
                                        break;
                                }
                                case 3:
                                {
                                        System.out.println("Игрок "+t[id].getName()+" хочет вправо");//gamer want to right
                                        if(t[id].x == N-1)
                                        {
                                                System.out.println("Ход не удался"); //:(
                                                //t[id].interrupt();
                                        }
                                        else
                                        {
                                                System.out.println("Походил вправо"+t[id].x+t[id].y);
                                                int x = t[id].x+1;
                                                if(field[x][t[id].y]!= null && field[x][t[id].y]==-2)
                                                {
                                                        System.out.println("Съел яблоко");
                                                        applesCount--;
                                                        t[id].myApple++;
                                                }
                                                field[t[id].x][t[id].y] = -1;
                                                field[x][t[id].y] = id;
                                                t[id].x++;
                                                //t[id].interrupt();
                                        }
                                        break;
                                }
                        }
                        //t[id].interrupt();
                        Thread.sleep(1000);
                        id++;
                }
        	}
        	catch(FileNotFoundException e)
        	{
        		System.err.println("Файл не найден");
        	}
        }
        public static boolean getApple()
        {
                Random r = new Random();
                return (r.nextFloat() < P);
        }
}